{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先来看看数据长什么样子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-4-04466810cd95>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将数据reshape成28x28的形状，还原成图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n1tfEdYdWctolT/w14vNvvMEukek58DsT313nN6ddjjv95Phhc/NA6c/IDcux1YOjnQfONnGHN+08\nfLM7Jjvtktu0NPH8f6Q7dbNPfcHEwSUzt9Zc7L7Yxzb8qmtTpypn46aIfYRIk76rTTzwc7sub/bm\nQ5x2NQMr/XIWLpFIMmRzxLpjXvibiReeY+eHO95+s9OuwcOl7/s63AkDAOAJSRgAAE/KzXB0UiU7\n/Dh/SHsTLz7HHfZ6Zqsdwnrv/jNN3PzdsKGuDDu8OLN5R6dOn2PXRqTstksoUr6eXthuIwr/O/H5\nQMn9XDnwD7vkod75c2N6/jov2mv/zQa7Zdbdw3/Lr3m+Fnxuf68aMBwtIiIqxf3zU6FLdMO7h/3P\nDjG2DBuCDsqZt8i26+3WndjPjoE+ducIE3etlOW0Cw5Pf51+uPskDEcXKGfLFhPPGGmndGoscZcJ\n5SyMPBUUreRd+d9PtuuxwClve7jIL1XsuBMGAMATkjAAAJ6QhAEA8CRh54STqrjb1K1+s7GJF3e2\nyxOe2tLSaTfh5pNNnPbtzxGfP/hV+ipbtjt1gyZPNPGodfar+du+PkCnEZPDK9htJsO3xJu60C4r\nyZCiz+Glz7bzuT/sdZc51Z6THd7c0CpiVbmV3KiBU5565Fv5tntmazOn3PoFO9eYE944SnVG2Lnk\nsX2PMnHXepHnmBG72qP8/Lv2rPO7U35DGkRo6Q93wgAAeEISBgDAk4Qajg4OQc9/8jCnLjgE/cTm\nVib+rldbp13yssJ/XX7lte6QdrfKE0y8+SD7fK/WaO+0y9m6rdCvhb86ZfaFJv7ysHedujFdR5n4\nIXGXkkUru5vdVe2gB+w0RLMU9/rVuX2ZiXd95D6Hyv/c8nJt+aX1Itbt1HYZy9sPn+nUVZ8beZoo\nFkuvbWLiH8e7p6V1qRgy8aJ+bn+b3Wt3hNLZkaciUPwyz+rslK/tPjHfdh9u6BT2k9K3PJA7YQAA\nPCEJAwDgSUINR/95ZQcTL+71rFP3yW67yf9357Yzcfay5UV+3X3VI481zttrh7AYfo6PtEH21/j5\n992pgX7VF5p44XNHm7jtf9c67dafbr81ec5Nk5y63jXsoR71UoKnNLgnNrzabLyJe/ZwN47Prsx4\ntIhIcu1aJr7zmncjtnt/h/1We/U3inf4OVzOHLur0jUT+jl1i3vZaax5vd2/KWd/ENiGa9rs+HSu\n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\n4hLFAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14c02daf7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 此处为定义输入，标签和学习率，均为占位符格式。\n",
    "### 输入数据为批数据，由于批数据值未定义，所以数据数据第一个维度留空，数据格式为NoneX784"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 此处定义模型结构。结构有二层。\n",
    "### 输入层为NoneX784维数据，第一层为100维数据，所以第一层权重格式为784X100，偏置为1X100；\n",
    "### 第二层为10维输出，所以第二层的权重格式为100X10，偏置为1X10；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算交叉熵损失和优化器。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 首先将输出进行softmax处理。然后计算输出结果与标签值相等的值，即准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 设置训练批数据为32，训练步数为1000."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 新建一个会话进行训练。训练在for循环中进行，循环次数即为训练次数。每次训练，均选一批数据进行。\n",
    "### 每次训练进行一次正向传播，计算出所有神经元的值，然后再进行一次反向传播，求得所有参数的梯度，根据给定的学习率，更新参数，包含权重及偏置。下一次训练再在新获得的参数上更新。\n",
    "### 同时，每次训练均计算交叉熵损失和准确率，用于显示训练进度及效果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.424039, the validation accuracy is 0.8336\n",
      "after 200 training steps, the loss is 0.529437, the validation accuracy is 0.892\n",
      "after 300 training steps, the loss is 0.342226, the validation accuracy is 0.9216\n",
      "after 400 training steps, the loss is 0.280829, the validation accuracy is 0.9166\n",
      "after 500 training steps, the loss is 0.134912, the validation accuracy is 0.9326\n",
      "after 600 training steps, the loss is 0.347988, the validation accuracy is 0.9288\n",
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.220983, the validation accuracy is 0.9436\n",
      "after 800 training steps, the loss is 0.360377, the validation accuracy is 0.943\n",
      "after 900 training steps, the loss is 0.224371, the validation accuracy is 0.9538\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9499\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 根据训练完成后保存的模型进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\wang\\Anaconda3\\envs\\DeepLearning\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ndT3J5p8HXjq6gxdPbDjaylfgi/+a18SL24JzwkRERJRA7ISJiIgCwuHoKG2/6HAv3nyKPUR8+0Gf\ne/HFtf4XUXljtre0ls+s+YEX1z2natj3ndasR0TlE5V3qQ3qe3H++Gpe/Hb7J6186/PTvbh2ymQv\nbplWHWEN+j5s0oaLdnvxmmeqWGlXPXy9F9f/v5/Cl09/s/zObl688LhnvHjA8r5Wvs0PtfHitp//\nnPiKlTM8EiYiIgoIO2EiIqKAcDg6REq3Tl68+F/mbMsfTn7KytcwdYZ5Txz2ZQbX/jPklfBD0EQV\n0dKnzZTMko5jfCn2MPN+qSYetS3Li2fvtKd0VmXXCbuuVDHn5H7a4eMiywaA8cMf9+KrFw2x0lKm\nzAWFt2+/vCJfn/9De2u5zeeVe5ifR8JEREQBYSdMREQUEHbCREREAeGccIjsNjW9eGnfF3wp1f6e\nOUb/3WbuivXGH4dGVUZt/Bav6lR4Kd3N3ZX2NrbvrrSyv7kr2dk9Z1hpuWomCr8dZ+7e1OS77VY+\nnbMgLvWsLPSIbtby+CNf9C2ZTdPne+w54UeHDfLimgs2mYSNW6x8KVv/Cr/uFNOmWU9c68ULz33W\nytc2PdOL9wzfYaXVvsTcGS9v3fqw66qs0jP3efHOAhO3/ConiOqUWzwSJiIiCgg7YSIiooBU2OHo\ntObNrOVFtzX34kZTzdBjrbfsO7Sk5KgXL801Qyh/5dmXO7RI2+bFl/w6yErbusjc+afRDFNenan2\n8Jju2uXFtbdxWDke9Kju1vLy60z85hH/58U9qoRcixKpYeYG/3tu2Wcljd5mhrtHzetlpbUfvMiL\nC/bad1irrHJr23en6l7FbI4KYH43w16+zMrX4oOpXpyPKBWYd7a70WwDOlWxL0Oa/8+nvfi7A96z\n0o460Qxj136dw9Gp7dpYywuOHevF1685weT7djbI4JEwERFRQNgJExERBYSdMBERUUAq1Jxwap3a\nXtzz0xVW2sQGH3nxUTPteR+/jM/M5SnDTr3Ei/MXLLHX1cnceq3ekt+ttHoFS4ssu+ibuFE0Co42\nc78rzdQcPj3qeStf2zT/pWVmHvirPfYlZ3cs7O/F2/605/9/7W8uW7lrvXl61mONZ1r5ulUzDyF/\nsud4K+3fN17ixc0fmQoC8qtK2LQDp17ixS0fKrvvq/1106zlT040D5k/J3Ozlbbt9Gwvrv16YuuV\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14c05608630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 从测试集上看，总体准确率不太理想。\n",
    "### 由于神经网络层数不多，神经元数量不多，初始化方式不合适，缺少正则化处理等，造成网络结构较简单，拟合能力不足，结果准确率在测试集上不理想。\n",
    "### 通过适当的改造，即修改初始化⽅式，增加正则化，调整神经元个数，增加隐层等，可以优化网络，有效提高准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
